package com.hspedu.interface_;

/**
 * 继承 和 实现接口 的区别
 *
 * 继承的价值主要在于: 解决代码的复用性和可维护性
 * 接口的价值主要在于：设计， 设计号各种规范（方法），让其他类区实现这些方法，可以更加的灵活
 *
 * 接口比继承更加灵活：
 * 继承是满足 is - a 的关系，而接口秩序满足 like - a的关系
 *
 * 接口在一定程度上实现代码解耦（接口规范性+动态绑定机制）
 */
public class ExtendsVsImplements {
    public static void main(String[] args) {
        LittleMonkey wukong = new LittleMonkey("悟空");
        wukong.climbing();
        wukong.swimming();
        wukong.flying();
    }
}

class Monkey{
    private String name;

    public Monkey(String name){
        this.name = name;
    }

    public void climbing(){
        System.out.println(name + "会爬树");
    }

    public String getName() {
        return name;
    }
}

interface Fishable{
    void swimming();
}

interface Birdable{
    void flying();
}

//继承父类并实现两个接口
class LittleMonkey extends Monkey implements Fishable,Birdable{
    public LittleMonkey(String name) {
        super(name);
    }

    @Override
    public void swimming() {
        System.out.println(getName()+"会游泳");
    }

    @Override
    public void flying() {
        System.out.println(getName()+ "会飞");
    }
}